package com.xjscrm.console.service.customer.group;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xjscrm.common.entity.WwGroup;
import com.xjscrm.common.entity.WwGroupMember;
import com.xjscrm.console.chat.frame.recv.RPullGroupMemberMsg;
import com.xjscrm.console.chat.frame.recv.RPullGroupMsg;
import com.xjscrm.console.param.BaseDto;
import com.xjscrm.console.param.group.*;
import com.xjscrm.console.vo.MyPageInfo;
import com.xjscrm.console.vo.WwGroupVo;

import javax.servlet.http.HttpServletResponse;

public interface WwGroupService {
    MyPageInfo<WwGroupVo> getWwGroupList(WwGroupQuery wwGroupQuery);

    Object getWwGroupDetail(WwGroupDto wwGroupDto);

    void groupMemberUpdateGroupName(WwGroupDto wwGroupDto);

    Object getGroupMemberList(WwGroupMemberQuery wwGroupMemberQuery);

    void addWwGroupConfig(WwGroupConfigDto wwGroupConfigDto);

    Object getWwGroupConfig(BaseDto baseDto);

    void updateGroupName(BatchUpdateGroupNameDto batchUpdateGroupNameDto);

    void updateGroupNameReplace(BatchUpdateGroupNameDto batchUpdateGroupNameDto);


    void deleGroup(WwGroupDto wwGroupDto);

    void exportWwGroup(WwGroupQuery wwGroupQuery, HttpServletResponse response);

    Page<WwGroup> pageFromChat(Long merId, RPullGroupMsg content);

    void syncWwGroup(SyncWwGroupDto syncWwGroupDto);

    void syncWwGroupMerber(SyncWwGroupMemberDto syncWwGroupMemberDto);


    WwGroup getByGroupId(Long merId, Long deviceUniqueId, String conversationId);

    Page<WwGroupMember> listMembersFromChat(RPullGroupMemberMsg content);

    WwGroup getByGroupIdAndDeviceId(Long merId, String deviceId, String conversationId);

    void QuitWwGroup(WwGroupDto wwGroupDto);

    void transferGroupAdmin(TransferGroupAdminDto transferGroupAdminDto);

    void addGroupManager(AddGroupManagerDto addGroupManagerDto);

    Object getReceiveDeviceList(TransferableGroupDto transferableGroupDto);

    Object getTransferableGroup(TransferableGroupDto transferableGroupDto);

    Object getManagerableGroup(ManagerableGroupDto managerableGroupDto);

    void batchSyncWwGroup(BatchSyncWwGroupDto batchSyncWwGroupDto);

    Object getSyncGroupList(SyncWwGroupQuery syncWwGroupQuery);

    void delSyncGroup(DelSyncGroupDto delSyncGroupDto);

    void excuteSyncGroup(BaseDto baseDto);
}
